<?php
// +----------------------------------------------------------------------
// | ThinkPHP [ WE CAN DO IT JUST THINK ]
// +----------------------------------------------------------------------
// | Copyright (c) 2006~2018 http://thinkphp.cn All rights reserved.
// +----------------------------------------------------------------------
// | Licensed ( http://www.apache.org/licenses/LICENSE-2.0 )
// +----------------------------------------------------------------------
// | Author: liu21st <liu21st@gmail.com>
// +----------------------------------------------------------------------

//框架版本号
define('THINK_VERSION', '5.0.24');
//返回当前时间戳的微秒数 当设置为 TRUE 时，规定函数应该返回一个浮点数，否则返回一个字符串。默认为 FALSE。
define('THINK_START_TIME', microtime(true));
//获取当前脚本内存使用情况
define('THINK_START_MEM', memory_get_usage());
//扩展名
define('EXT', '.php');
//路径分隔符
define('DS', DIRECTORY_SEPARATOR);
//框架thinkphp目录
defined('THINK_PATH') or define('THINK_PATH', __DIR__ . DS);
//框架library目录
define('LIB_PATH', THINK_PATH . 'library' . DS);
//框架think目录
define('CORE_PATH', LIB_PATH . 'think' . DS);
//框架traits目录 这是一个面向对象的一个特性 traits
define('TRAIT_PATH', LIB_PATH . 'traits' . DS);
//项目入口文件目录  public
defined('APP_PATH') or define('APP_PATH', dirname($_SERVER['SCRIPT_FILENAME']) . DS);
//项目目录;
defined('ROOT_PATH') or define('ROOT_PATH', dirname(realpath(APP_PATH)) . DS);
//项目扩展目录
defined('EXTEND_PATH') or define('EXTEND_PATH', ROOT_PATH . 'extend' . DS);
//项目第三方应用目录
defined('VENDOR_PATH') or define('VENDOR_PATH', ROOT_PATH . 'vendor' . DS);
//项目的运行时目录
defined('RUNTIME_PATH') or define('RUNTIME_PATH', ROOT_PATH . 'runtime' . DS);
//项目的日志目录
defined('LOG_PATH') or define('LOG_PATH', RUNTIME_PATH . 'log' . DS);
//项目的缓存目录
defined('CACHE_PATH') or define('CACHE_PATH', RUNTIME_PATH . 'cache' . DS);
//项目的临时目录
defined('TEMP_PATH') or define('TEMP_PATH', RUNTIME_PATH . 'temp' . DS);
// 配置文件目录
defined('CONF_PATH') or define('CONF_PATH', APP_PATH);
// 配置文件后缀
defined('CONF_EXT') or define('CONF_EXT', EXT);
// 环境变量的配置前缀
defined('ENV_PREFIX') or define('ENV_PREFIX', 'PHP_');
//php判断解析php服务是由那种服务器软件

define('IS_CLI', PHP_SAPI == 'cli' ? true : false);

//是win系统返回真 PHP_OS php的运行系统 strpos返回 0
define('IS_WIN', strpos(PHP_OS, 'WIN') !== false);

// 载入Loader类
require CORE_PATH . 'Loader.php';


// 加载环境变量配置文件
if (is_file(ROOT_PATH . '.env')) {
    //将传入的文件转为配置配置文件并且以联合数组返回
    $env = parse_ini_file(ROOT_PATH . '.env', true);
  
    foreach ($env as $key => $val) {
        //将key转化大写
        $name = ENV_PREFIX . strtoupper($key);
        if (is_array($val)) {
            foreach ($val as $k => $v) {
                $item = $name . '_' . strtoupper($k);
                //配置系统环境变量
                putenv("$item=$v");
            }
        } else {
            putenv("$name=$val");
        }
    }
}
//可以获取环境变量的值
//echo "<pre>";
//print_r(getenv('PHP_DATABASE_HOSTNAME') );
//exit;


// 注册自动加载
/**
 * 这就开始应用命明空间加载方式
 * 如果开头用\开始那就是在全局去找think (php5.3 借鉴java的方式 在这前都是用 include )
 * 这里我什么用命明空间了因为需要掉要静态方法 如果用include 需要实例化之后再掉也可以的但是直接这么命明空间掉很简单实用
 */

\think\Loader::register();


// 注册错误和异常处理机制
\think\Error::register();

// 加载惯例配置文件
\think\Config::set(include THINK_PATH . 'convention' . EXT);
